package 中等.位运算;

import java.util.Arrays;

/**
 * 下一个数。给定一个正整数，找出与其二进制表达式中1的个数相同且大小最接近的那两个数（一个略大，一个略小）。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/closed-number-lcci/
 */
public class 下一个数_05_04 {

    public static void main(String[] args) {

        System.out.println(Arrays.toString(findClosedNumbers(1073741823)));

    }

    /**
     * 模拟
     *
     * @param num
     * @return
     */
    public static int[] findClosedNumbers(int num) {
        // 特判
        if (num == 1) return new int[]{2, -1};
        if (num == 2147483647) return new int[]{-1, -1};

        int count = Integer.bitCount(num);

        int max = num + 1, min = num - 1;
        while (max < Integer.MAX_VALUE && Integer.bitCount(max) != count) max++;
        if (max == Integer.MAX_VALUE) max = -1;
        while (Integer.bitCount(min) != count) min--;

        return new int[]{max, min};
    }

}
